package thread

class JoinTest {
    private val thread = Thread {
        println("${Thread.currentThread().name}-start")
        test()
    }

    private val thread1 = Thread {
        println("${Thread.currentThread().name}-start")
        test1()
    }

    private fun test() {
        println("${Thread.currentThread().name}-join-start")
        thread1.start()
        //join()在线程里面意味着“插队”，哪个线程调用join代表那个线程插队先执行。
        //但是插谁的队是有讲究了，不是说你可以插到队头去做第一个吃螃蟹的人，而是插到在当前运行线程的前面。
        //比如系统目前运行线程A，在线程A里面调用了线程B.join方法，则接下来线程B会抢先在线程A面前执行，等到线程B全部执行完后才继续执行线程A。
        thread1.join()
        println("${Thread.currentThread().name}-join-end")
    }

    private fun test1() {
        println("${Thread.currentThread().name}-notifyTest-start")
        Thread.sleep(2000L)
        println("${Thread.currentThread().name}-notifyTest-end")
    }

    fun main() {
        thread.name = "thread"
        thread1.name = "thread1"

        thread.start()
    }
}

fun main() {
    val join = JoinTest()
    join.main()
}